package config

type Config struct {
	Log    Log    `mapstructure:"log" json:"log" yaml:"log"`
	Serve  Serve  `mapstructure:"serve" json:"serve" yaml:"serve"`
	Mysql  Mysql  `mapstructure:"mysql" json:"mysql" yaml:"mysql"`
	Redis  Redis  `mapstructure:"redis" json:"redis" yaml:"redis"`
	Wechat Wechat `mapstructure:"wechat" json:"wechat" yaml:"wechat"`
	Kimi   Kimi   `mapstructure:"kimi" json:"kimi" yaml:"kimi"`
	Spark  Spark  `mapstructure:"spark" json:"spark" yaml:"spark"`
}

// Serve gin服务配置
type Serve struct {
	Port      int    `mapstructure:"port" json:"port" yaml:"port" description:"gin开启监听http服务的端口"`
	RunMode   string `mapstructure:"run-mode" json:"run-mode" yaml:"run-mode" description:"gin运行模式的默认，枚举值：debug,release"`
	UseRedis  bool   `mapstructure:"use-redis" json:"use-redis" yaml:"use-redis" description:"是否使用redis"`
	AppName   string `mapstructure:"app-name" json:"app-name" yaml:"app-name" description:"项目名称"`
	StaticDir string `mapstructure:"static-dir" json:"static-dir" yaml:"static-dir" description:"上传的文件存储目录地址"`

	AppNameEn  string `mapstructure:"app-name-en" json:"app-name-en" yaml:"app-name-en" description:"项目名称英文"`
	Md5Key     string `mapstructure:"md5-key" json:"md5-key" yaml:"md5-key" description:"Md5密钥"`
	DesKey     string `mapstructure:"des-key" json:"des-key" yaml:"des-key" description:"Des密钥"`
	IsStopTask bool   `mapstructure:"is-stop-task" json:"is-stop-task" yaml:"is-stop-task" description:"是否停止任务，此功能用于多服务器部署时，定时任务只需一台服务器执行，其他服务器不执行的情况下设置为true"`
	AiType     string `mapstructure:"ai-type" json:"ai-type" yaml:"ai-type" description:"ai类型"`
}

// Log 日志配置
type Log struct {
	Prefix          string `mapstructure:"prefix" json:"prefix" yaml:"prefix" description:"日志输出前缀"`
	LogFile         bool   `mapstructure:"log-file" json:"logFile" yaml:"log-file" description:""`
	Stdout          string `mapstructure:"stdout" json:"stdout" yaml:"stdout" description:""`
	FileStdout      string `mapstructure:"file-stdout" json:"file-stdout" yaml:"file-stdout" description:""`
	SaveMaxDay      int    `mapstructure:"save-max-day" json:"save-max-day" yaml:"save-max-day" description:"最多保留多少天的日志"`
	CuttingDay      int    `mapstructure:"cutting-day" json:"cutting-day" yaml:"cutting-day" description:"相隔几天切割文件"`
	LogDirPath      string `mapstructure:"log-dir-path" json:"log-dir-path" yaml:"log-dir-path" description:"日志目录"`
	LogSoftLink     string `mapstructure:"log-soft-link" json:"log-soft-link" yaml:"log-soft-link" description:"日志软链接"`
	BinlogDirPath   string `mapstructure:"binlog-dir-path" json:"binlog-dir-path" yaml:"binlog-dir-path" description:"binlog日志目录"`
	BinlogSoftLink  string `mapstructure:"binlog-soft-link" json:"binlog-soft-link" yaml:"binlog-soft-link" description:"binlog日志软链接"`
	FilelogDirPath  string `mapstructure:"filelog-dir-path" json:"filelog-dir-path" yaml:"filelog-dir-path" description:"用户自主记录的日志目录"`
	FilelogSoftLink string `mapstructure:"filelog-soft-link" json:"filelog-soft-link" yaml:"filelog-soft-link" description:"用户自主记录的日志软链接"`
}

// Mysql 数据库配置
type Mysql struct {
	//LogMode             bool        `mapstructure:"log-mode" json:"log-mode" yaml:"log-mode" description:"是否开启日志"`
	Stdout              bool        `mapstructure:"stdout" json:"stdout" yaml:"stdout" description:"日志是否输出在控制台"`
	DefaultDsnAliasName string      `mapstructure:"default-dsn-alias-name" json:"default-dsn-alias-name" yaml:"default-dsn-alias-name" description:"默认的数据库连接别名"`
	List                []MysqlConn `mapstructure:"list" json:"list" yaml:"list" description:"数据库链接配置列表"`
	Binlog              Binlog      `mapstructure:"binlog" json:"binlog" yaml:"binlog" description:"mysql binlog配置"`
}

type Binlog struct {
	IsListen   bool   `mapstructure:"is-listen" json:"is-listen" yaml:"is-listen" description:"是否监听mysql binlog"`
	ServerID   uint32 `mapstructure:"server-id" json:"server-id" yaml:"server-id" description:"mysql binlog server id" default:"10000"`
	LogSaveDay int    `mapstructure:"log-save-day" json:"log-save-day" yaml:"log-save-day" description:"更新日志保存天数" default:"10"`
	Host       string `mapstructure:"host" json:"host" yaml:"host" description:"mysql binlog地址"`
	User       string `mapstructure:"user" json:"user" yaml:"user" description:"mysql binlog用户名"`
	Password   string `mapstructure:"password" json:"password" yaml:"password" description:"mysql binlog密码"`
	Db         string `mapstructure:"db" json:"db" yaml:"db" description:"mysql binlog数据库"`
}

// MysqlConn mysql数据链接配置
type MysqlConn struct {
	Dsn          string `mapstructure:"dsn" json:"dsc" yaml:"dsn" description:"数据库连接配置"`
	AliasName    string `mapstructure:"alias-name" json:"alias-name" yaml:"alias-name" description:"数据库别名"`
	MaxIdleConns int    `mapstructure:"max-idle-conns" json:"max-idle-conns" yaml:"max-idle-conns" description:"最大空闲连接"`
	MaxOpenConns int    `mapstructure:"max-open-conns" json:"max-open-conns" yaml:"max-open-conns" description:"最大连接数"`
}

// Redis redis配置
type Redis struct {
	Address   string `mapstructure:"address" json:"address" yaml:"address" description:"redis服务链接地址"`
	Password  string `mapstructure:"password" json:"password" yaml:"password" description:"redis服务密码"`
	Db        int    `mapstructure:"db" json:"db" yaml:"db" description:"默认使用的redis库"`
	ServeType string `mapstructure:"serve-type" json:"serve-type" yaml:"serve-type" description:"redis服务类型，单机或者cluster；默认单机"`
}

type Kimi struct {
	Key string `mapstructure:"key" json:"key" yaml:"key" description:"kimi秘钥"`
}

// Spark
// @Description: 讯飞星火大模型
type Spark struct {
	AiAppId     string `mapstructure:"ai-appid" json:"ai-appid" yaml:"ai-appid" description:"ai appid"`
	AiApiKey    string `mapstructure:"ai-api-key" json:"ai-api-key" yaml:"ai-api-key" description:"ai api key"`
	AiApiSecret string `mapstructure:"ai-api-secret" json:"ai-api-secret" yaml:"ai-api-secret" description:"ai api secret"`
	AiDomain    string `mapstructure:"ai-domain" json:"ai-domain" yaml:"ai-domain" description:"ai domain"`
	AiUrl       string `mapstructure:"ai-url" json:"ai-url" yaml:"ai-url" description:"ai url"`
}

// Wechat
// @Description: 微信相关配置
type Wechat struct {
	PersonalWhiteList []string `mapstructure:"personal-white-list" json:"personal-white-list" yaml:"personal-white-list" description:"联系人白名单"`
	RoomWhiteList     []string `mapstructure:"room-white-list" json:"room-white-list" yaml:"room-white-list" description:"群组白名单"`
}
